package com.resign.carl.adapter;

import com.resign.carl.adapter.api.Duck;
import com.resign.carl.adapter.api.Turkey;
import com.resign.carl.adapter.api.TurkeyAdapter;
import com.resign.carl.adapter.api.impl.MallardDuck;
import com.resign.carl.adapter.api.impl.WildTurkey;

/**
 * 适配器模式
 * Created by carl.zhao on 2016/6/15.
 */
public class Client {

    public static void main(String[] args) {
        // 创建一只火鸡
        Turkey turkey =  new WildTurkey();
        // 创建一只鸭子
        Duck duck = new MallardDuck();
        // 然后将火鸡包装进一个火鸡适配器中，使它看起来像一个鸭子
        Duck turkeyAdapter = new TurkeyAdapter(turkey);

        // 测试这个火鸡，让它咯咯叫，让它飞行
        System.out.println("The Turkey say...");
        turkey.gobble();
        turkey.fly();
        // 接着调用testDuck方法来测试鸭子，这个方法需要传入一个鸭子对象
        System.out.println("\nThe Duck sqy...");
        testDuck(duck);
        // 重要的测试来了,我们试着传入一个假装是鸭子的火鸡
        System.out.println("\nThe TurkeyAdapter says...");
        testDuck(turkeyAdapter);
    }

    static void testDuck(Duck duck){
        duck.quack();
        duck.fly();
    }
}
